"""
Оценка активности беседы с помощью жетонов.

Таблица жетонов за период 30 дней, процент жизни беседы и сколько будет вычтено завтра
Днамика изменение жетонов, +отметки максимума и минимума, процентом жизни и средние значения

Author: Milinuri Nirvalen
"""

from chiori import Plugin
from libs.chat_control import get_chat
from libs.chat_control import get_str_time
from libs.chat_control import tokens_log
from libs.utils import sp
from libs.vk import args
from libs.vk import get_ids
from libs.vk import get_profiles


p = Plugin(name='чат: жетоны активности', backend='vk',
	desc='информация об активности участников в беседе',
	args= {
		'count':'количество',
		'target':args['target']
	})

# functions
# =========

def count_tokens(c):
	'''посчитать кол-во токенов, которое будет сожжено
	:param c: экземпляр Config с данными 'tokens'

	:return: текст со статистикой'''

	tokens = sum(map(sum, c.values()))
	l = sum(map(lambda x: x[0], c.values()))

	return f'🔥 будет сожжено 🪙{l} жетонов (-{round(l/tokens*100, 2)}%❤)'


# commands
# ========

@p.command('tokens', 'токены', 'жетоны', usage='таблица лидеров по жетонам',
	check_func={'check_chat':0}, else_func='chioNotAdmin')
async def tokensLeaderbord(event, ctx):
	chat = get_chat(event).file_data
	c = chat["tokens"]
	h = tokens_log(chat["tokens_history"])
	tokens = sum(map(sum, c.values())) or 1

	profiles = await get_profiles(event, ctx, c.keys())
	hp = round(tokens / (h["max_tokens"] or 1)*100, 2)

	text = f'таблица лидеров по жетонам (🪙{sp(tokens)} / {hp}% ❤):'
	t = get_str_time(chat["timers"]["day"] - ctx.now)

	i = 0

	for k, v in sorted(c.items(), key=lambda x: sum(x[1]), reverse=True):
		i += 1

		if i > 25:
			break

		pr = profiles[k]

		if i == 1:
			s = "🥇"
		elif i == 2:
			s = "🥈"
		elif i == 3:
			s = "🥉"
		else:
			s = i

		percent = round(sum(v)/tokens*100, 2)

		text += f'\n{s} [{percent}%] {pr["name"]} - {sp(sum(v))}'

	text += f'\n\n{count_tokens(c)}\n⏳ до обновления сезона: {t}'

	await ctx.message(text)


@p.command('история-жетонов', '<token(s) log>',
	usage='динамика изменения жетонов в чате',
	check_func={'check_chat':0}, else_func='chioNotAdmin')
async def TokensLog(event, ctx):
	c = get_chat(event).file_data
	data = tokens_log(c["tokens_history"])
	profiles = event.get('to.profiles')
	text = ''
	tokens = sum(map(sum, c['tokens'].values())) or 1
	i = 0


	for k, v in sorted(c['tokens'].items(), key=lambda x: sum(x[1]), reverse=True):
		i += 1

		if i > 3:
			break

		pr = profiles[k]

		if i == 1:
			s = "🥇"
		elif i == 2:
			s = "🥈"
		elif i == 3:
			s = "🥉"
		else:
			s = i

		percent = round(sum(v)/tokens*100, 2)
		text += f'\n{s} [{percent}%] {pr["name"]} - {sp(sum(v))}'

	text += f'''\nистория изменения жетонов:
{data["text"]}

[ - / = / + ]
-- 🪙 жетоны: {data["min_tokens"]} / {data["avarage_tokens"]} / {data["max_tokens"]}
-- 🔶 потеряно: {data["min_lose"]} / {data["avarage_lose"]} / {data["max_lose"]}
-- 🔷️ выдано: {data["min_added"]} / {data["avarage_added"]} / {data["max_added"]}'''

	await ctx.message(text)
